﻿using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Prism.Navigation.Regions;
using prism_model1.Views;
using prism_model2.Views;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace wpf_prism.ViewModels
{
    // 如果你坚持使用 Prism 的 BindableBase，就不能使用 [ObservableProperty] 自动生成功能，必须手动写属性：
    // 如果你希望使用 [ObservableProperty] 和 [RelayCommand]，请将 ViewModel 类改为继承 ObservableObject：
    internal partial class MainWindowViewModel : ObservableObject
    {

        #region 属性
        private readonly IRegionManager _regionManager;

        private string _message = "Hello World!";
        public string Message
        {
            get => _message;
            set => SetProperty(ref _message, value);
        }

        /// <summary>
        /// Message2 属性，绑定到 Message2TextBox 控件
        /// 等价于上面的 Message 属性，自动的生成 get 和 set 方法
        /// 
        /// </summary>
        [ObservableProperty]
        private string message2 = "初始内容";


        [ObservableProperty]
        private List<Menu> _menus = new List<Menu>();


        // 定义 ICommand 属性
        public DelegateCommand ClickCommand { get; }

        #endregion


        #region 构造函数

        // 构造函数中初始化命令
        public MainWindowViewModel()
        {
           
        }


        public MainWindowViewModel(IRegionManager regionManager)
        {
            this._regionManager = regionManager;
            ClickCommand = new DelegateCommand(ExecuteClickCommand);
            regionManager.RegisterViewWithRegion("MainRegion", typeof(ViewA));

            _menus = new List<Menu>()
            {
                new(){ Name = nameof(ViewA)},
                new(){ Name = nameof(PrismUserControl1)},
                new(){ Name = nameof(ViewC)},
                new(){ Name = nameof(ViewD)},
            };
        }

        #endregion


        #region 命令

        /// <summary>
        /// Click2Command 方法    
        /// </summary>
        [RelayCommand]
        public void Click2()
        {
            Message2 = "按钮被点击了！";
            //MessageBox.Show("按钮被点击了！");
        }

        [RelayCommand]
        public void OpenModel1_View1()
        {
            // 导航到prism_model1的view1页面，MainRegion
            _regionManager.Regions["MainRegion"].RequestNavigate(nameof(PrismUserControl1), back =>
            {
                
            });
        }


       

        // 命令执行的方法
        private void ExecuteClickCommand()
        {
            Message = "按钮被点击了！";
            // 这里可以添加更多逻辑

            // MessageBox.Show("按钮被点击了！");
        }

        
        [RelayCommand]
        public void Navigate(Menu obj)
        {
            // 导航到prism_model1的view1页面，MainRegion
            _regionManager.Regions["MainRegion"].RequestNavigate(obj.Name, back =>
            {
                if (back.Success)
                {
                    Debug.WriteLine(obj.Name);
                }
            });
        }

        #endregion

    }
}
